package com.AdvancedDemos.FileAndIO;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Learn字符流 {
    public static void main(String[] args) throws IOException {
        //1.字符输入流FileReader  底层是字节输入流+编码表(IDEA:UTF-8)
        FileReader fileReader = new FileReader("helloworld\\src\\com\\AdvancedDemos\\FileAndIO\\a.txt");//参数可以传递:1.String文件路径 2.File文件对象


        //2.每次读取单个字符
        int ch;//ch变量依次保存的是读取的字符值
        while ((ch = fileReader.read()) != -1) {
            System.out.print((char) ch);//我的名字叫八格牙路
            // 没有出现乱码,因为a.txt是用的IDEA默认的UTF-8字符集编码的,而此处打开文件也是采用的默认的UTF-8字符集解码
        }
        System.out.println();
        fileReader.close();


        //3.每次读取一个字符数组
        //int read(char[] chs)
        //读到文件末尾没有读到数据时返回-1
        //读到数据,返回度读取的字符个数
        fileReader = new FileReader("helloworld\\src\\com\\AdvancedDemos\\FileAndIO\\a.txt");
        char[] chs = new char[5];
        int count;
        while ((count = fileReader.read(chs)) != -1) {
//            System.out.println(chs);//最后一次可能会打出上一次的脏数据
            String s = new String(chs, 0, count);//每次只打印当次读到的字符
            System.out.println(s);
            //我的名字叫
            //八格牙路
        }
        fileReader.close();

//------------------------------------------------------

        //4.字符输出流FileWriter
        FileWriter fileWriter = new FileWriter("helloworld\\src\\com\\AdvancedDemos\\FileAndIO\\b.txt");
        //使用平台默认的编码方式输出字符
        //参数:
        //1.String路径
        //2.File对象
        //或 添加参数boolean append 追加写入开关
        //追加写入打开时,是不会改变原文件的编码方式的

        //注意事项:
        //1.表示的文件不存在,创建文件,但必须保证父级路径存在
        //2.如果原来文件存在,清空文件内容,覆盖文件编码方式


        //5.写出数据
        //字符
        fileWriter.write('困');
        //字符数组
        char[] chs1 = {'R', 'A', 'P'};
        fileWriter.write(chs1);
        //字符数组的一部分
        fileWriter.write(chs1, 0, 2);
        //字符串
        fileWriter.write("\r\n");
        fileWriter.write("王嘉伟赶着去火葬场");
        //字符串的一部分
        fileWriter.write("王嘉伟sb", 3, 2);

        //关闭流
        fileWriter.close();

    }
}
